// 用户相关API接口

/**
 * 用户登录
 * @param {object} loginData - 登录数据 {username, password}
 * @returns {Promise} 登录结果
 */
export async function login(loginData) {
  try {
    const response = await fetch(`/api/admin/auth/login`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(loginData)
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    const result = await response.json()

    if (result.code === 200) {
      return result.data
    } else {
      throw new Error(result.msg || '登录失败')
    }
  } catch (error) {
    console.error('登录失败:', error)
    throw error
  }
}

/**
 * 获取用户信息
 * @returns {Promise} 用户信息
 */
export async function getUserInfo() {
  try {
    const response = await fetch(`/api/admin/auth/info`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    const result = await response.json()

    if (result.code === 200) {
      return result.data
    } else {
      throw new Error(result.msg || '获取用户信息失败')
    }
  } catch (error) {
    console.error('获取用户信息失败:', error)
    throw error
  }
}

/**
 * 用户登出
 * @returns {Promise} 登出结果
 */
export async function logout() {
  try {
    const response = await fetch(`/api/admin/auth/logout`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      }
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    const result = await response.json()

    if (result.code === 200) {
      return result.data
    } else {
      throw new Error(result.msg || '登出失败')
    }
  } catch (error) {
    console.error('登出失败:', error)
    throw error
  }
}

/**
 * 分页查询用户信息
 * @param {object} params - 查询参数 {pageNum, pageSize}
 * @returns {Promise} 用户列表数据
 */
export async function getUserPage(params = {}) {
  try {
    console.log("发送用户分页查询请求，参数:", params);

    const response = await fetch(`/api/admin/user/page`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(params)
    })

    console.log("响应状态:", response.status);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    console.log("服务器原始响应:", text);

    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    console.log("解析后的结果:", result.data.records);

    if (result.code === 200) {
      // 处理用户头像URL拼接
      if (result.data && result.data.records && Array.isArray(result.data.records)) {
        result.data.records = result.data.records.map(user => {
          if (user.avatar) {
            // 拼接完整的头像URL
            user.avatar = `http://192.168.199.178:9000/fznostalgia/user/${user.avatar}`;
          }
          return user;
        });
        console.log("处理头像URL后的用户列表:", result.data.records);
      }
      return result
    } else {
      throw new Error(result.msg || '获取用户列表失败')
    }
  } catch (error) {
    console.error('获取用户列表失败:', error)
    throw error
  }
}

/**
 * 用户注册（添加用户）
 * @param {object} registerData - 注册数据 {username, password, phone, cityId}
 * @returns {Promise} 注册结果
 */
export async function register(registerData) {
  try {
    console.log("发送用户注册请求，数据:", registerData);

    const response = await fetch(`/api/register`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(registerData)
    })

    console.log("响应状态:", response.status);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    console.log("服务器原始响应:", text);

    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result
    } else {
      throw new Error(result.msg || '注册失败')
    }
  } catch (error) {
    console.error('注册失败:', error)
    throw error
  }
}

/**
 * 创建用户
 * @param {object} userData - 用户数据
 * @returns {Promise} 创建结果
 */
export async function createUser(userData) {
  try {
    console.log("发送用户创建请求，数据:", userData);

    const response = await fetch(`/api/admin/user/create`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(userData)
    })

    console.log("响应状态:", response.status);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    console.log("服务器原始响应:", text);

    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result
    } else {
      throw new Error(result.msg || '创建用户失败')
    }
  } catch (error) {
    console.error('创建用户失败:', error)
    throw error
  }
}

/**
 * 更新用户信息
 * @param {object} userData - 用户数据
 * @returns {Promise} 更新结果
 */
export async function updateUser(userData) {
  try {
    console.log("发送用户更新请求，数据:", userData);

    // 创建 FormData 对象
    const formData = new FormData()

    // 添加所有字段到 FormData
    if (userData.id !== undefined && userData.id !== null) {
      formData.append('id', userData.id.toString())
    }
    if (userData.username) {
      formData.append('username', userData.username)
    }
    if (userData.password) {
      formData.append('password', userData.password)
    }
    if (userData.phone) {
      formData.append('phone', userData.phone)
    }
    if (userData.email) {
      formData.append('email', userData.email)
    }
    if (userData.status !== undefined && userData.status !== null) {
      // 将状态转换为数字：正常=1，禁用=0
      const statusValue = userData.status === '正常' ? 1 : 0
      formData.append('status', statusValue.toString())
    }
    if (userData.cityId !== undefined && userData.cityId !== null) {
      formData.append('cityId', userData.cityId.toString())
    }

    // 如果有头像文件，添加到 FormData（使用 @RequestPart）
    if (userData.avatarFile) {
      formData.append('avatarFile', userData.avatarFile)
    }

    console.log("FormData 内容:");
    for (let [key, value] of formData.entries()) {
      console.log(key, value);
    }

    const response = await fetch(`/api/admin/user/update`, {
      method: 'POST',
      // 不设置 Content-Type，让浏览器自动设置 multipart/form-data
      body: formData
    })

    console.log("响应状态:", response.status);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    console.log("服务器原始响应:", text);

    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result
    } else {
      throw new Error(result.msg || '更新用户信息失败')
    }
  } catch (error) {
    console.error('更新用户信息失败:', error)
    throw error
  }
}

/**
 * 删除用户
 * @param {number|string} userId - 用户ID
 * @returns {Promise} 删除结果
 */
export async function deleteUser(userId) {
  try {
    console.log("发送用户删除请求，用户ID:", userId);

    const response = await fetch(`/api/admin/user/delete/${userId}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    })

    console.log("响应状态:", response.status);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    console.log("服务器原始响应:", text);

    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result
    } else {
      throw new Error(result.msg || '删除用户失败')
    }
  } catch (error) {
    console.error('删除用户失败:', error)
    throw error
  }
}

/**
 * 批量删除用户
 * @param {Array} userIds - 用户ID数组
 * @returns {Promise} 删除结果
 */
export async function batchDeleteUsers(userIds) {
  try {
    console.log("发送批量删除用户请求，用户IDs:", userIds);

    const response = await fetch(`/api/admin/user/batch-delete`, {
      method: 'DELETE',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ userIds })
    })

    console.log("响应状态:", response.status);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    console.log("服务器原始响应:", text);

    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result
    } else {
      throw new Error(result.msg || '批量删除用户失败')
    }
  } catch (error) {
    console.error('批量删除用户失败:', error)
    throw error
  }
}

/**
 * 根据ID获取单个用户信息
 * @param {number|string} userId - 用户ID
 * @returns {Promise} 用户信息
 */
export async function getUserById(userId) {
  try {
    console.log("发送获取用户详情请求，用户ID:", userId);

    const response = await fetch(`/api/admin/user/${userId}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    })

    console.log("响应状态:", response.status);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    console.log("服务器原始响应:", text);

    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      console.log("获取用户详情成功:", result);

      return result
    } else {
      throw new Error(result.msg || '获取用户详情失败')
    }
  } catch (error) {
    console.error('获取用户详情失败:', error)
    throw error
  }
}

/**
 * 获取省份列表
 * @returns {Promise} 省份列表
 */
export async function getProvinceList() {
  try {
    const response = await fetch(`/api/province/list`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result.data
    } else {
      throw new Error(result.msg || '获取省份列表失败')
    }
  } catch (error) {
    console.error('获取省份列表失败:', error)
    throw error
  }
}

/**
 * 根据省份ID获取城市列表
 * @param {number} provinceId - 省份ID
 * @returns {Promise} 城市列表
 */
export async function getCityList(provinceId) {
  try {
    const response = await fetch(`/api/city/list/${provinceId}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result.data
    } else {
      throw new Error(result.msg || '获取城市列表失败')
    }
  } catch (error) {
    console.error('获取城市列表失败:', error)
    throw error
  }
}

/**
 * 获取用户详情
 * @param {number|string} userId - 用户ID
 * @returns {Promise} 用户详情
 */
export async function getUserDetails(userId) {
  try {
    console.log("发送获取用户详情请求，用户ID:", userId);

    const response = await fetch(`/api/admin/user/details/${userId}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    })

    console.log("响应状态:", response.status);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    console.log("服务器原始响应:", text);

    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result.data
    } else {
      throw new Error(result.msg || '获取用户详情失败')
    }
  } catch (error) {
    console.error('获取用户详情失败:', error)
    throw error
  }
}

/**
 * 根据城市ID获取省名
 * @param {number} cityId - 城市ID
 * @returns {Promise} 省名
 */
export async function getProvinceNameByCityId(cityId) {
  try {
    const response = await fetch(`/api/city/provinceName/${cityId}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    // 检查响应是否有内容
    const text = await response.text()
    if (!text) {
      throw new Error('服务器返回空响应')
    }

    let result
    try {
      result = JSON.parse(text)
    } catch (parseError) {
      console.error('JSON解析失败:', text)
      throw new Error('服务器返回的数据格式不正确')
    }

    if (result.code === 200) {
      return result.data
    } else {
      throw new Error(result.msg || '获取省名失败')
    }
  } catch (error) {
    console.error('获取省名失败:', error)
    throw error
  }
}